package Test_1201;

/**
 * Created with Intellij IDEA
 * Description:
 * User: 星辰
 */
public class TestHeap {
    //堆中的变量：
    public int[] elem;//数组
    public int usedSize;//为什么要使用这个

    public TestHeap(int[] elem) {
        this.elem = elem;
    }
    //初始化元素
    public void intiElem(int[] array){
        for (int i = 0; i < array.length; i++) {
            this.elem[i]=array[i];
            this.usedSize++;
        }
    }
    //从最后一个节点开始向上调整
    public void creatHeap(){
        for (int parent = (this.usedSize-2)/2; parent >=0 ; parent--) {
            //将根节点向下调整
            //起始，结束
            siftDown(parent,this.usedSize);
        }
    }
    //大堆的创建：

    //加父节点与最大的子节点进行比较，如果小于，不交换，大于交换
    private void siftDown(int parent,int usedSize){
        int child=2*parent+1;
        //为什么要进入循环，不是交换一次吗，然后每次for循环在进去一次调整
        while(child<usedSize){
        if(child+1<usedSize&& elem[child]<elem[child+1]){
            child++;
        }
        if(elem[child]>elem[parent]){
            swap(elem,child,parent);
            //交换完后，将父节点的
        }else{
            break;
        } }
    }
     private void swap(int elem[],int i,int j){
        int tmp=elem[i];
        elem[i]=elem[j];
        elem[j]=tmp;

     }}
